package mx.ipn.persistencia.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import mx.ipn.persistencia.FabricaDeDAOs;
import mx.ipn.persistencia.dao.EmpleadoDAO;
import mx.ipn.persistencia.dao.ResponsableDAO;
import mx.ipn.to.EmpleadoTO;
import mx.ipn.to.ResponsableTO;

public class ResponsableDAOMySQL implements ResponsableDAO {
	static{FabricaDeDAOsMySQL.iniciaLog(ResponsableDAOMySQL.class);}

	private static final String INSERT = "INSERT INTO responsable (id_empleado_jefe,id_empleado_subordinado,activo) VALUES(?,?,?)";
	private static final String ACTIVADESACTIVA = "UPDATE responsable SET activo=? WHERE id_responsable=?";
	private static final String UPDATE = "UPDATE responsable SET id_empleado_jefe=?,id_empleado_subordinado=?,activo=? WHERE id_responsable=?";

	private static final String FINDBYID = "SELECT * FROM responsable WHERE id_responsable=?";
	private static final String FINDBYJEFESUBORDINADO = "SELECT * FROM responsable WHERE id_empleado_jefe=? AND id_empleado_subordinado=? AND activo=true";

	private static final String SELECT = "SELECT * FROM responsable"; 
	private static final String SELECTACTIVO = "SELECT * FROM responsable WHERE activo=true";
	private static final String SELECTJEFEDISTINTOACTIVO = "SELECT distinct id_empleado_jefe FROM responsable WHERE activo=true";

    private static final String SELECTACTIVOBYJEFE = "SELECT * FROM responsable WHERE id_empleado_jefe=? AND activo=true";
	private static final String SELECTBYJEFE = "SELECT * FROM responsable WHERE id_empleado_jefe=?";
	private static final String SELECTACTIVOBYSUBORDINADO = "SELECT * FROM responsable WHERE id_empleado_subordinado=? AND activo=true";
	private static final String SELECTBYSUBORDINADO = "SELECT * FROM responsable WHERE id_empleado_subordinado=?";

	@Override
	public short activaDesactivaResponsable(int idResponsable, boolean activo) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(ACTIVADESACTIVA);

			ps.setBoolean(1, activo);
			ps.setInt(2, idResponsable);

			ps.executeUpdate();

			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			}

			else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}
	}

	@Override
	public ResponsableTO findResponsableById(int idResponsable) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(FINDBYID);
			ps.setInt(1, idResponsable);
			ResultSet rs = ps.executeQuery();

			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			EmpleadoDAO empleadoDAO = fabricaMySQL.getEmpleadoDAO();

			if (rs.next()) {
				ArrayList<EmpleadoTO> listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
				ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
				idResponsable = rs.getInt("id_responsable");
				EmpleadoTO empleadoJefeTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_jefe"));
				EmpleadoTO empleadoSubordinadoTO = empleadoDAO
						.findEmpleadoById(rs.getInt("id_empleado_subordinado"));
				listEmpleadoJefeTO.add(empleadoJefeTO);
				listEmpleadoSubordinadoTO.add(empleadoSubordinadoTO);
				boolean activo = rs.getBoolean("activo");

				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				
				ResponsableTO responsableTO = new ResponsableTO(idResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO, activo);

				ps.close();
				conexion.close();
				return responsableTO;
			}

			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ResponsableTO findResponsableByJefeSubordinado(int idJefe,
			int idSubordinado) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion
					.prepareStatement(FINDBYJEFESUBORDINADO);
			ps.setInt(1, idJefe);
			ps.setInt(2, idSubordinado);
			ResultSet rs = ps.executeQuery();

			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			EmpleadoDAO empleadoDAO = fabricaMySQL.getEmpleadoDAO();

			if (rs.next()) {
				ArrayList<EmpleadoTO> listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
				ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
				int idResponsable = rs.getInt("id_responsable");
				EmpleadoTO empleadoJefeTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_jefe"));
				EmpleadoTO empleadoSubordinadoTO = empleadoDAO
						.findEmpleadoById(rs.getInt("id_empleado_subordinado"));
				listEmpleadoJefeTO.add(empleadoJefeTO);
				listEmpleadoSubordinadoTO.add(empleadoSubordinadoTO);
				boolean activo = rs.getBoolean("activo");

				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				
				ResponsableTO responsableTO = new ResponsableTO(idResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO, activo);

				ps.close();
				conexion.close();
				return responsableTO;
			}

			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public boolean insertResponsable(ResponsableTO responsableTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(INSERT);

			ps.setInt(1, responsableTO.getIdEmpleadoJefe());
			ps.setInt(2, responsableTO.getIdEmpleadoSubordinado());
			ps.setBoolean(3, responsableTO.getActivo());

			ps.executeUpdate();

			ps.close();
			conexion.close();

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public ArrayList<ResponsableTO> selectResponsable() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			// Crea la fabrica especifica de MySQL
			FabricaDeDAOs fabricaMySQL = null;
			// Crea un DAO para la tabla Cliente
			EmpleadoDAO empleadoDAO = null;

			ArrayList<ResponsableTO> responsableTO = null;
			ResponsableTO responsableTO2 = null;

			PreparedStatement ps = conexion.prepareStatement(SELECT);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (responsableTO == null) {
					responsableTO = new ArrayList<ResponsableTO>();
					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
				}

				ArrayList<EmpleadoTO> listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
				ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
				int idResponsable = rs.getInt("id_responsable");
				EmpleadoTO empleadoJefeTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_jefe"));
				EmpleadoTO empleadoSubordinadoTO = empleadoDAO
						.findEmpleadoById(rs.getInt("id_empleado_subordinado"));
				listEmpleadoJefeTO.add(empleadoJefeTO);
				listEmpleadoSubordinadoTO.add(empleadoSubordinadoTO);
				boolean activo = rs.getBoolean("activo");

				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				
				responsableTO2 = new ResponsableTO(idResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO, activo);

				responsableTO.add(responsableTO2);
			}
			ps.close();
			conexion.close();
			return responsableTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<ResponsableTO> selectResponsableActivo() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			FabricaDeDAOs fabricaMySQL = null;
			
			EmpleadoDAO empleadoDAO = null;

			ArrayList<ResponsableTO> responsableTO = null;
			ResponsableTO responsableTO2 = null;

			PreparedStatement ps = conexion.prepareStatement(SELECTACTIVO);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (responsableTO == null) {
					responsableTO = new ArrayList<ResponsableTO>();
					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
				}

				ArrayList<EmpleadoTO> listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
				ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
				int idResponsable = rs.getInt("id_responsable");
				EmpleadoTO empleadoJefeTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_jefe"));
				EmpleadoTO empleadoSubordinadoTO = empleadoDAO
						.findEmpleadoById(rs.getInt("id_empleado_subordinado"));
				listEmpleadoJefeTO.add(empleadoJefeTO);
				listEmpleadoSubordinadoTO.add(empleadoSubordinadoTO);
				boolean activo = rs.getBoolean("activo");

				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				
				responsableTO2 = new ResponsableTO(idResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO, activo);

				responsableTO.add(responsableTO2);
			}
			ps.close();
			conexion.close();
			return responsableTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	@Override
	public ArrayList<EmpleadoTO> selectJefeDistintoActivo() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			FabricaDeDAOs fabricaMySQL = null;
			
			EmpleadoDAO empleadoDAO = null;

			ArrayList<EmpleadoTO> arrJefeTO = null;

			PreparedStatement ps = conexion.prepareStatement(SELECTJEFEDISTINTOACTIVO);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (arrJefeTO == null) {
					arrJefeTO = new ArrayList<EmpleadoTO>();
					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
				}

				EmpleadoTO empleadoJefeTO = empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_jefe"));
				
				arrJefeTO.add(empleadoJefeTO);
			}
			ps.close();
			conexion.close();
			return arrJefeTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ResponsableTO selectResponsableActivoByJefe(int idJefe) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			FabricaDeDAOs fabricaMySQL = null;
			
			EmpleadoDAO empleadoDAO = null;

			ArrayList<Integer> listIdResponsable = null;
			ArrayList<EmpleadoTO> listEmpleadoJefeTO = null;
			ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = null;
			ArrayList<Boolean> listActivo = null;

			ResponsableTO responsableTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTACTIVOBYJEFE);
			ps.setInt(1, idJefe);
			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdResponsable == null) {

					listIdResponsable = new ArrayList<Integer>();
					listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
					listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
					listActivo = new ArrayList<Boolean>();
					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
				}

				listIdResponsable.add(rs.getInt("id_responsable"));
				listEmpleadoSubordinadoTO.add(empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_subordinado")));
				listActivo.add(rs.getBoolean("activo"));
			}
			if (listIdResponsable != null) {
				listEmpleadoJefeTO.add(empleadoDAO.findEmpleadoById(idJefe));
				
				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				Boolean[] arrActivo = (Boolean[])listActivo.toArray(new Boolean[listActivo.size()]);
				Integer[] arrIdResponsable = (Integer[])listIdResponsable.toArray(new Integer[listIdResponsable.size()]);
				
				responsableTO = new ResponsableTO(arrIdResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO,
						arrActivo);
			}
			ps.close();
			conexion.close();
			return responsableTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ResponsableTO selectResponsableActivoBySubordinado(int idSubordinado) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			// Crea la fabrica especifica de MySQL
			FabricaDeDAOs fabricaMySQL = null;
			// Crea un DAO para la tabla Cliente
			EmpleadoDAO empleadoDAO = null;

			ArrayList<Integer> listIdResponsable = null;
			ArrayList<EmpleadoTO> listEmpleadoJefeTO = null;
			ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = null;
			ArrayList<Boolean> listActivo = null;

			ResponsableTO responsableTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTACTIVOBYSUBORDINADO);
			ps.setInt(1, idSubordinado);
			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdResponsable == null) {

					listIdResponsable = new ArrayList<Integer>();
					listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
					listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
					listActivo = new ArrayList<Boolean>();
					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
				}

				listIdResponsable.add(rs.getInt("id_responsable"));
				listEmpleadoJefeTO.add(empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_jefe")));
				listActivo.add(rs.getBoolean("activo"));
			}
			if (listIdResponsable != null) {
				listEmpleadoSubordinadoTO.add(empleadoDAO.findEmpleadoById(idSubordinado));
				
				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				Boolean[] arrActivo = (Boolean[])listActivo.toArray(new Boolean[listActivo.size()]);
				Integer[] arrIdResponsable = (Integer[])listIdResponsable.toArray(new Integer[listIdResponsable.size()]);
				
				responsableTO = new ResponsableTO(arrIdResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO,
						arrActivo);
			}
			ps.close();
			conexion.close();
			return responsableTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ResponsableTO selectResponsableByJefe(int idJefe) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			// Crea la fabrica especifica de MySQL
			FabricaDeDAOs fabricaMySQL = null;
			// Crea un DAO para la tabla Cliente
			EmpleadoDAO empleadoDAO = null;

			ArrayList<Integer> listIdResponsable = null;
			ArrayList<EmpleadoTO> listEmpleadoJefeTO = null;
			ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = null;
			ArrayList<Boolean> listActivo = null;

			ResponsableTO responsableTO = null;

			PreparedStatement ps = conexion.prepareStatement(SELECTBYJEFE);
			ps.setInt(1, idJefe);
			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdResponsable == null) {

					listIdResponsable = new ArrayList<Integer>();
					listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
					listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
					listActivo = new ArrayList<Boolean>();
					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
				}

				listIdResponsable.add(rs.getInt("id_responsable"));
				listEmpleadoSubordinadoTO.add(empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_subordinado")));
				listActivo.add(rs.getBoolean("activo"));
			}
			if (listIdResponsable != null) {
				listEmpleadoJefeTO.add(empleadoDAO.findEmpleadoById(idJefe));
				
				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				Boolean[] arrActivo = (Boolean[])listActivo.toArray(new Boolean[listActivo.size()]);
				Integer[] arrIdResponsable = (Integer[])listIdResponsable.toArray(new Integer[listIdResponsable.size()]);
				
				responsableTO = new ResponsableTO(arrIdResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO,
						arrActivo);
			}
			ps.close();
			conexion.close();
			return responsableTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ResponsableTO selectResponsableBySubordinado(int idSubordinado) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			FabricaDeDAOs fabricaMySQL = null;

			EmpleadoDAO empleadoDAO = null;

			ArrayList<Integer> listIdResponsable = null;
			ArrayList<EmpleadoTO> listEmpleadoJefeTO = null;
			ArrayList<EmpleadoTO> listEmpleadoSubordinadoTO = null;
			ArrayList<Boolean> listActivo = null;

			ResponsableTO responsableTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYSUBORDINADO);
			ps.setInt(1, idSubordinado);
			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdResponsable == null) {

					listIdResponsable = new ArrayList<Integer>();
					listEmpleadoJefeTO = new ArrayList<EmpleadoTO>();
					listEmpleadoSubordinadoTO = new ArrayList<EmpleadoTO>();
					listActivo = new ArrayList<Boolean>();
					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					empleadoDAO = fabricaMySQL.getEmpleadoDAO();
				}

				listIdResponsable.add(rs.getInt("id_responsable"));
				listEmpleadoJefeTO.add(empleadoDAO.findEmpleadoById(rs
						.getInt("id_empleado_jefe")));
				listActivo.add(rs.getBoolean("activo"));
			}
			if (listIdResponsable != null) {
				listEmpleadoSubordinadoTO.add(empleadoDAO.findEmpleadoById(idSubordinado));
				
				EmpleadoTO[] arrEmpleadoJefeTO = (EmpleadoTO[])listEmpleadoJefeTO.toArray(new EmpleadoTO[listEmpleadoJefeTO.size()]);
				EmpleadoTO[] arrEmpleadoSubordinadoTO = (EmpleadoTO[])listEmpleadoSubordinadoTO.toArray(new EmpleadoTO[listEmpleadoSubordinadoTO.size()]);
				Boolean[] arrActivo = (Boolean[])listActivo.toArray(new Boolean[listActivo.size()]);
				Integer[] arrIdResponsable = (Integer[])listIdResponsable.toArray(new Integer[listIdResponsable.size()]);
				
				responsableTO = new ResponsableTO(arrIdResponsable,
						arrEmpleadoJefeTO, arrEmpleadoSubordinadoTO,
						arrActivo);
			}
			ps.close();
			conexion.close();
			return responsableTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public short updateResponsable(ResponsableTO responsableTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(UPDATE);

			ps.setInt(1, responsableTO.getIdEmpleadoJefe());
			ps.setInt(2, responsableTO.getIdEmpleadoSubordinado());
			ps.setBoolean(3, responsableTO.getActivo());
			ps.setInt(4, responsableTO.getIdResponsable());

			ps.executeUpdate();

			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}

	}

}
